第一版111111111111

第二版2222222222222

第三版3333333333，其中第二版在test4修改，没有拉取最新版




import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score

"""
案例：集成学习值bagging思想 随机森林算法 代码
   集成学习：
        概述：把多个弱学习器，组成成一个强的学习器的过程-》集成学习。‘=
        思想：
            bagging思想：
                1：有放回的随机抽取
                2：平权投票
                3：可以并行执行
            boosting思想：
                1：每次训练都使用全部的训练集（样本）
                2：加权投票 ：-》 预测正确 ：权重降低 ，预测错误：权重升高
                3：只能串行执行
            bagging思想代表：
                随机森林算法
            
            随机森林：
                1：每个弱学习器都是CART树（必须二叉树） 
                2：有放回的随机抽样，平权投票，并行执行
"""


# 1、读取数据: train.csv
df = pd.read_csv('data/train.csv')

#2、数据预处理
# 特征列:  船舱等级: Pclass 、 性别:Sex 、年龄:Age
#标签列: Survived
x = df[['Pclass','Sex','Age']]
y = df['Survived']
#Age列空值填充： Age列平均值
x['Age'].fillna(x['Age'].mean(),inplace =True)

#热编码
x = pd.get_dummies(x)

#拆分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=20)
#场景1：决策树:DecisionTreeClassifier
model1 = DecisionTreeClassifier(max_depth=3)
model1.fit(x_train,y_train)
y_pre_1 = model1.predict(x_test)
print(f'准确分：{accuracy_score(y_test,y_pre_1)}')

#场景2：随机森林算法: RandomForestClassifier
model2 = RandomForestClassifier(n_estimators=10,max_depth=3)
model2.fit(x_train,y_train)
y_pre_2 = model2.predict(x_test)
print(f'准确分随机森林：：{accuracy_score(y_test,y_pre_2)}')

#场景3 网格搜索:n_estimators,max_depth
# RandomForestClassifier，GridSearchCV
random_model = RandomForestClassifier()
param = {'n_estimators':[1,3,5,10,15],'max_depth':[1,3,5,10]}
cv_model = GridSearchCV(estimator=random_model, param_grid=param, cv=4)

#最佳参数
print('**'*20)
cv_model.fit(x_train,y_train)
print(cv_model.best_estimator_)
y_pre_3 = cv_model.best_estimator_.predict(x_test)
#准确率
print(f'优化随机森林：{accuracy_score(y_test,y_pre_3)}')